package coba.excel;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ParsearParticipantes {

	public static List<ParticipanteRow> run(InputStream is) throws IOException {

		XSSFWorkbook workbook = new XSSFWorkbook(is);

		XSSFSheet sheet = workbook.getSheetAt(0);

		Iterator<Row> rowIterator = sheet.iterator();

		List<ParticipanteRow> listParticipanteRow =
				new LinkedList<ParticipanteRow>();

		int lineasEnBlanco = 0;
		
		while (rowIterator.hasNext()) {

			Row row = rowIterator.next();

			if (row.getRowNum() == 0)
				continue;

			Iterator<Cell> cellIterator = row.cellIterator();

			Cell cellApellido = cellIterator.next();
			String apellido = cellApellido.getStringCellValue();

			Cell cellNombre = cellIterator.next();
			String nombre = cellNombre.getStringCellValue();

			Cell cellGenero = cellIterator.next();
			String genero = cellGenero.getStringCellValue();

			Cell cellDni = cellIterator.next();
			String dni = null;

			try {
				dni = cellDni.getStringCellValue();
			}
			catch (IllegalStateException e) {
				dni = String.valueOf((long) cellDni.getNumericCellValue());
			}

			Cell cellTelefono = cellIterator.next();
			String telefono = null;

			try {
				telefono = cellTelefono.getStringCellValue();
			}
			catch (IllegalStateException e) {
				telefono = String.valueOf((long) cellTelefono.getNumericCellValue());
			}

			Cell cellEmail = cellIterator.next();
			String email = cellEmail.getStringCellValue();

			Cell cellFechaNacimiento = cellIterator.next();
			Date fechaNacimiento = null;
			boolean fechaNacimientoValida = true;

			try {
				fechaNacimiento = cellFechaNacimiento.getDateCellValue();
			}
			catch (IllegalStateException e) {
				fechaNacimientoValida = false;
			}

			Cell cellEspecificacionAlimenticia = cellIterator.next();
			String especificacionAlimenticia = cellEspecificacionAlimenticia.getStringCellValue();

			Cell cellEnfermedades = cellIterator.next();
			String enfermedades = cellEnfermedades.getStringCellValue();

			Cell cellObservaciones = cellIterator.next();
			String observaciones = cellObservaciones.getStringCellValue();

			if ((apellido == null || apellido.trim().equals("")) &&
					(nombre == null || nombre.trim().equals("")) &&
					(genero == null || genero.trim().equals("")) &&
					(dni == null || dni.trim().equals("")) &&
					(telefono == null || telefono.trim().equals("")) &&
					(email == null || email.trim().equals("")) &&
					(fechaNacimiento == null) &&
					(especificacionAlimenticia == null || especificacionAlimenticia.trim().equals("")) &&
					(enfermedades == null || enfermedades.trim().equals("")) &&
					(observaciones == null || observaciones.trim().equals(""))) {
				if (lineasEnBlanco ++ == 0)
					continue;
				else
					break;
			}
			else {
				lineasEnBlanco = 0;
			}

			listParticipanteRow.add(new ParticipanteRow(row.getRowNum() + 1,
					apellido, nombre, genero, dni, telefono, email,
					fechaNacimiento, fechaNacimientoValida,
					especificacionAlimenticia, enfermedades, observaciones));

		}

		return listParticipanteRow;

	}

}
